home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / installed_progs / text / faqs / eiffel-faq < prev    next >
Encoding:
Internet Message Format  |  1994-04-27  |  47.5 KB

  1. Subject: comp.lang.eiffel Frequently Asked Questions (FAQ)
  2. Newsgroups: comp.lang.eiffel,comp.answers,news.answers
  3. From: rogerb@eiffel.demon.co.uk (Roger Browne)
  4. Date: Tue, 26 Apr 1994 08:21:19 +0000
  5.  
  6. Archive-name: eiffel-faq
  7. Last-modified: 26 April 1994
  8.  
  9. EIFFEL: FREQUENTLY ASKED QUESTIONS
  10. ----------------------------------
  11.  
  12. This question-and-answer list is posted monthly to the Usenet newsgroups 
  13. comp.lang.eiffel, comp.answers and news.answers.
  14.  
  15. Please send corrections, additions and comments to Roger Browne 
  16. (rogerb@eiffel.demon.co.uk).
  17.  
  18. This information is abstracted and condensed from the posts of many 
  19. contributors to comp.lang.eiffel, supplemented by information from vendors. 
  20. No guarantees are made regarding its accuracy.
  21.  
  22. This compilation is by Roger Browne. Distribution over the Internet or by 
  23. electronic mail is unrestricted. Other use requires my permission.
  24.  
  25. You can receive the latest copy by anonymous file transfer from:
  26.  
  27.    ftp.cm.cf.ac.uk  /pub/eiffel/eiffel-faq
  28.    rtfm.mit.edu     pub/usenet/news.answers/eiffel.faq
  29.  
  30. or by sending an email message to archive-server@cm.cf.ac.uk with the 
  31. following message body:
  32.  
  33.    send Eiffel eiffel-faq
  34.  
  35. ----------
  36.  
  37. CONTENTS
  38.  
  39. Changes since the last posting:
  40.  
  41.    Q03: Removed references to vapourware
  42.    Q13: Changes to NICE Board
  43.    Q16: Various changes to Eiffel reseller list
  44.    Q20: Where can I get an Eiffel editor or emacs-mode? (new question)
  45.  
  46.    Thanks to Steve Tynor, Bertrand Meyer, Alan Philips, Mike Davis
  47.    and Franck Arnaud for their input.
  48.  
  49. Frequently Asked Questions:
  50.  
  51.    Q01) What is Eiffel?
  52.    Q02) Where did Eiffel come from?
  53.    Q03) What Eiffel products are available?
  54.    Q04) Are there any school or student discounts?
  55.    Q05) Is Eiffel available in the public domain?
  56.    Q06) What is Sather? How does it compare to Eiffel?
  57.    Q07) What books are available for learning about Eiffel?
  58.    Q08) Are any magazines or newsletters available concerning Eiffel?
  59.    Q09) Is Eiffel available on PC, Mac, NeXT, Amiga, Atari, ...?
  60.    Q10) Is there an archive of the comp.lang.eiffel newsgroup?
  61.    Q11) How much memory and disk space does Eiffel development require?
  62.    Q12) How large are typical Eiffel executables?
  63.    Q13) Are there standards for the Eiffel language?
  64.    Q14) How fast do Eiffel applications run?
  65.    Q15) Are there any Eiffel user groups?
  66.    Q16) Where can I get Eiffel products and services?
  67.    Q17) Are there any conferences for Eiffel users?
  68.    Q18) Why do Eiffel implementations compile to C?
  69.    Q19) What is BON?
  70.    Q20) Where can I get an Eiffel editor or emacs-mode?
  71.  
  72. Language Issues:
  73.  
  74.    L01) What features does Eiffel have?
  75.    L02) What changes have been made to the Eiffel language definition?
  76.    L03) What libraries come with Eiffel?
  77.    L04) What's the big deal about preconditions and postconditions?
  78.    L05) Please explain and discuss covariance vs. contravariance.
  79.    L06) Is it true that there are "holes" in the Eiffel type system?
  80.    L07) Is there support for concurrency in Eiffel?
  81.    L08) Why doesn't Eiffel allow function overloading?
  82.    L09) Why are there no procedural types in Eiffel?
  83.  
  84. ----------
  85.  
  86. Q01)   What is Eiffel?
  87.  
  88. Eiffel is an advanced object-oriented programming language that emphasizes 
  89. the design and construction of high-quality and reusable software.
  90.  
  91. Eiffel is not a superset or extension of any other language. Eiffel 
  92. strongly encourages object-oriented programming and does not allow 
  93. dangerous practices from previous generation languages although it does 
  94. interface to other languages such as C and C++. Eiffel supports the concept 
  95. of "Design by Contract" to improve software correctness.
  96.  
  97. Beyond the language aspect Eiffel may be viewed as a method of software 
  98. construction. Eiffel is an excellent vehicle for software education, 
  99. including for a first programming course.
  100.  
  101. Eiffel is typically implemented by compilation to C, ensuring wide 
  102. portability.
  103.  
  104. ----------
  105.  
  106. Q02)   Where did Eiffel come from?
  107.  
  108. Eiffel was created by Bertrand Meyer and developed by his company, 
  109. Interactive Software Engineering (ISE) of Goleta, CA.
  110.  
  111. Dr. Meyer borrowed on his extensive experience with OOP, particularly with 
  112. Simula. He also added in important concepts from his academic work on 
  113. software verification and computer language definition.
  114.  
  115. Eiffel's design addresses many practical concerns that software engineers 
  116. face when creating complex software. Eiffel has evolved continually since 
  117. its conception on September 14, 1985 and its first introduction in 1986.
  118.  
  119. ----------
  120.  
  121. Q03)   What Eiffel products are available?
  122.  
  123. ISE Eiffel 3 is a commercially supported product available from Interactive 
  124. Software Engineering.
  125.  
  126. ISE Eiffel 3 is a complete graphical development environment meant for the 
  127. production of quality software, with particular attention being given to 
  128. the development of large systems. The environment itself is written in 
  129. Eiffel, and is an example of non-trivial system - about 3000 classes.
  130.  
  131. A version of Eiffel called Eiffel/S is produced by SIG Computer GmbH of 
  132. Germany. It is based on the Eiffel 3 language definition.
  133.  
  134. Eiffel/S Version 3, release 1.3 includes:
  135.    - command-line compiler with automatic configuration management
  136.    - libraries
  137.    - manual
  138.  
  139. Tower Technology Corporation of Austin, TX produce TowerEiffel. It 
  140. includes:
  141.    - compiler
  142.    - many programming tools
  143.    - an emacs-based integrated programming environment
  144.    - Eiffel 3 kernel and support libraries
  145.  
  146. ----------
  147.  
  148. Q04)   Are their any school or student discounts?
  149.  
  150. Both ISE Eiffel and SIG Eiffel/S include aggressive site-licensing and 
  151. discount licenses for schools and universities.
  152.  
  153. Eiffel/S offers an inexpensive student or trial license. This license is 
  154. limited to building systems with up to 75 classes. You do not have to be a 
  155. student to buy it, and you get a discount if you subsequently upgrade to 
  156. the full version.
  157.  
  158. ISE is also selling student licenses on their lower cost platforms.
  159.  
  160. TowerEiffel offers a much reduced price for student, university or non-
  161. commercial licenses.
  162.  
  163. ----------
  164.  
  165. Q05)   Is Eiffel available in the public domain?
  166.  
  167. There is not currently a public domain Eiffel compiler. ISE has expressed 
  168. willingness to support the serious efforts of those who wish to create a PD 
  169. Eiffel, but so far no such effort has succeeded.
  170.  
  171. There is, however, a somewhat limited Eiffel 2.3 interpreter for the Atari 
  172. ST which is shareware (DM50). The documentation is in German, and the 
  173. example files seem quite interesting. Inheritance does not seem to be 
  174. supported (!), but there is an interesting extension to allow "for all" and 
  175. "for some" in assertions.
  176.  
  177. The following Eiffel archive sites allow anonymous file transfer:
  178.  
  179. ftp.tu-clausthal.de
  180. pub/atari/languages/eiffel/vici_102.lzh
  181.    The Atari ST interpreter referred to above.
  182.  
  183. ftp.cm.cf.ac.uk
  184. /pub/eiffel
  185.    University of Wales. Contains the latest version of this FAQ, plus the 
  186.    front-end parser (ep) and various public domain classes. To contribute, 
  187.    contact Ted Lawson (ted@cm.cf.ac.uk).
  188.  
  189. ftp.fu-berlin.de
  190. /pub/heron/ep.tar.Z
  191.    There is an Eiffel front-end parser (HERON) in the public domain, 
  192.    created by Burghardt Groeber and Olaf Langmack of the Freie Universitat 
  193.    in Berlin. Olaf has announced that the Freie Universitat has agreed to 
  194.    join the NICE consortium and keep the front-end parser in sync with the 
  195.    Eiffel language definition as it evolves.
  196.  
  197. ftp.informatik.uni-stuttgart.de
  198. /pub/eiffel
  199.    Falkultaet Informatik der Universitaet Stuttgart, Germany. Contains a 
  200.    compiler generator, several encapsulations, a pretty-printer for 
  201.    Eiffel/S, and some utility classes. To contribute, contact Joerg Schulz 
  202.    (schulz@adam.informatik.uni-stuttgart.de).
  203.  
  204. utarlg.uta.edu
  205. CSE/EIFFEL
  206.    UT-Arlington, USA. Contains some code from Eiffel Outlook back issues.
  207.  
  208. wuarchive.wustl.edu
  209. /graphics/gif/e/eiffel_tower
  210.    Contains a GIF graphic of the eiffel tower
  211.    (also on plaza.aarnet.edu.au from Australia only).
  212.  
  213. ----------
  214.  
  215. Q06)   What is Sather? How does it compare to Eiffel?
  216.  
  217. Sather is an object-oriented language, originally patterned after Eiffel, 
  218. created by Stephen Omohundro and others at ICSI of Berkeley, CA.
  219.  
  220. Sather simplifies some Eiffel constructs, eliminates others, and adds some 
  221. powerful constructs of its own such as iteration abstraction, built-in 
  222. arrays, overloading and object constants.
  223.  
  224. Sather is available for free, under a very unrestrictive license. The 
  225. documentation for Sather, and the ICSI implementation of it, are available 
  226. by anonymous file transfer from the following sites:
  227.  
  228.    ftp.ICSI.Berkeley.edu   /pub/sather
  229.    ftp.gmd.de              /pub/Sather
  230.    sra.co.jp               /pub/lang/sather
  231.    lynx.csis.dit.csiro.au  /pub/sather
  232.  
  233. See the usenet newsgroup comp.lang.sather for more details.
  234.  
  235. ----------
  236.  
  237. Q07)   What books are available for learning about Eiffel?
  238.  
  239. The classic text for learning about Eiffel (as well as Object-Oriented 
  240. programming in general) is Dr. Meyer's "Object Oriented Software 
  241. Construction". Although the language has evolved significantly since the 
  242. book's date of publication, the presentation of the basic problems and 
  243. solutions which motivate the object-oriented mind set are still quite 
  244. compelling. This is the book to get if you are new to the object-oriented 
  245. world as well as to Eiffel. (Prentice Hall, ISBN 13-629031-0)
  246.  
  247. Also by Dr. Meyer, "Eiffel: The Language", combines an introduction to 
  248. Eiffel, the language reference, and a good deal of philosophy into its 600 
  249. pages. This is the state of the art in OO thinking, but is a rigorous and 
  250. comprehensive book which some readers may find heavy going despite Dr. 
  251. Meyer's clarity of expression. It is, however, the definitive language 
  252. reference, and essential reading for all serious Eiffel users. This book is 
  253. now in its second _printing_ (same ISBN), with some minor corrections and 
  254. clarifications (this is not a second _edition_, and none is currently 
  255. underway). (Prentice Hall, ISBN 13-247925-7)
  256.  
  257. Dr. Meyer and Jean-Marc Nerson have edited a new book about Eiffel called 
  258. "Object-Oriented Applications". It includes an introduction to Eiffel 
  259. technology followed by seven in-depth descriptions of large applications 
  260. written in Eiffel. (Prentice Hall, ISBN 13-013798-7)
  261.  
  262. Robert Switzer, from Gottingen University in Germany, has written "Eiffel: 
  263. An Introduction". This is a very clear and concise primer for those wishing 
  264. to learn Eiffel, with many code fragments, and two substantial Eiffel 
  265. applications. (Prentice Hall, ISBN 13-105909-2)
  266.  
  267. ISE distributes a set of 6 video lectures (about one hour each) entitled 
  268. "Object-Oriented Software Construction", taught by Bertrand Meyer. These 
  269. provide an overall introduction to the method and use ISE Eiffel 3 to 
  270. illustrate the concepts.
  271.  
  272. Frieder Monninger's book "Eiffel: Objektorientiertes Programmieren in der 
  273. Praxis" is a very down-to-earth Eiffel handbook for German speakers. 
  274. (Heise, ISBN 3-88229-028-5).
  275.  
  276. Bertrand Meyer's "Reusable Software: The Base Object-Oriented Component 
  277. Libraries" (Prentice Hall, ISBN 0-13-245499-8, about 530 pages) describes 
  278. principles of library design and the taxonomy of fundamental computing 
  279. structures that led to ISE's EiffelBase libraries. Also serves as a manual 
  280. for the EiffelBase libraries.
  281.  
  282. ----------
  283.  
  284. Q08)   Are any magazines or newsletters available concerning Eiffel?
  285.  
  286. Eiffel Outlook is a bi-monthly newsletter devoted to Eiffel and Sather. It 
  287. is 24 pages long and focuses mainly on practical and technical issues
  288. involved in using these languages. Contact Tower Technology Corporation for 
  289. more information. Trial subscriptions and back issues are available.
  290.  
  291. Eiffel Outlook is distributed by:
  292.  
  293.    Jay-Kell in Canada
  294.    SIG Computer in Germany
  295.    Everything Eiffel in the United Kingdom and France
  296.    Simon Parker in Ireland
  297.    IMSL in Japan
  298.    Enea Data in Sweden
  299.    Class Technology in Australia
  300.    Tower Technology in the USA and for all other countries
  301.  
  302. Eiffel Post is a four page newsletter (in German) for customers of SIG 
  303. Computer, the makers of Eiffel/S.
  304.  
  305. The Eiffel Interest Group of the UK and Ireland publishes an excellent 
  306. newsletter for its members.
  307.  
  308. NICE has produced a four-page glossy flyer "Eiffel Success Stories", 
  309. intended to be the first of a series.
  310.  
  311. ISE produces an 8-page newsletter "Eiffel World" which will appear several 
  312. times a year.
  313.  
  314. ----------
  315.  
  316. Q09)   Is Eiffel available on PC, Mac, NeXT, Amiga, Atari, ...?
  317.  
  318. This is the latest information that I have, but it does change rapidly.
  319.  
  320. SIG Eiffel/S 1.3 is available for DOS on the PC. As at January 1994, the 
  321. following C compilers are supported: Microsoft C 7.0, Borland C++ 3.x, Gnu 
  322. 2.2.2 (with DJ Expander), Gnu 2.4.5 (with emx-g expander), Symantec C++ 
  323. 6.0, Watcom 9.5. SIG uses Symantec in-house. It works best with a 32-bit 
  324. compiler, e.g. Gnu, Symantec, Watcom.
  325.  
  326. Eiffel/S 1.3 is also available for OS/2 (using GCC 2.4.5 emx-g, Watcom C 
  327. 9.5 or IBM C/Set) and Windows/NT (Microsoft 32-bit C, Watcom C 9.5 or 
  328. Symantec C++ 6.0), and for the following Unix systems: Linux, PC Unix 
  329. (Interactive, SCO, and ESIX), SPARC, NeXT, NeXTstep-Intel, HP/9000, DEC 
  330. 5xxx, Sony News, DG Aviion and RS/6000.
  331.  
  332. ISE's Eiffel 3 (Release 3.2) is available for DEC Alpha (OSF-1), DEC MIPS 
  333. (Ultrix), DG Aviion (and hence other 88Open platforms), Fujitsu, HP UX, IBM 
  334. RS/6000, Pyramid, SCO (Open Desktop), Silicon Graphics and Sparc (Solaris 
  335. 2.3 or SunOS). NeXTSTEP (Intel and Motorola) is also available (for 
  336. EiffelBench only, so far). The VMS version is nearing completion. 
  337. Development is underway for other platforms.
  338.  
  339. Tower Corporation's TowerEiffel (Release 1.2) is available on Sun SPARC or 
  340. compatible running SunOS 4.1.x with gcc 2.2.2, gcc 2.4.5 or Sun's acc 2.0.1 
  341. C compiler; also running Solaris 2.1 with gcc 2.4.5. A preliminary version 
  342. is available for OS/2 and Solaris x86. Ports to NeXT 486 and Windows NT are 
  343. underway.
  344.  
  345. Future ports of TowerEiffel are planned for AIX, IRIX, HPUX, DG/UX, 
  346. NextStep, Windows NT, OS/2, VMS and various Intel-based Unix systems.
  347.  
  348. ----------
  349.  
  350. Q10)   Is there an archive of the comp.lang.eiffel newsgroup?
  351.  
  352. An archive of the newsgroup is available on gatekeeper.dec.com. The DEC 
  353. Western Research Lab hosts it. This archive does not contain articles after 
  354. September 1992.
  355.  
  356. The files are in /pub/plan/eiffel/usenet/USENET-xx-yyy, where `xx' 
  357. represents the last two digits of the year and `yyy' the month of posting, 
  358. e.g., /pub/plan/eiffel/usenet/USENET-91-AUG. Compressed versions of the 
  359. files are also available.
  360.  
  361. >By anonymous FTP to gatekeeper.dec.com (16.1.0.2)
  362.    cd pub/plan/eiffel/usenet
  363.    get USENET-xx-yyy
  364.    (or to get the compressed copy, bin, get USENET-xx-yyy.Z)
  365.  
  366. >From a UUCP neighbour of decwrl:
  367.    "uucp decwrl!~/pub/plan/eiffel/usenet/USENET-xx-yyy.Z"
  368.  
  369. >From the DEC Easynet:
  370.    DECWRL::"/pub/plan/eiffel/usenet/USENET-xx-yyy"
  371.  
  372. USENET-88-DEC and USENET-88-DEC.Z are the oldest entries in the archives.
  373.  
  374. There is also an archive of comp.lang.eiffel at wuarchive.wustl.edu (login 
  375. as anonymous, send e-mail address as password). The files are in 
  376. /usenet/comp.lang.eiffel and subdirectories. Each message is in a separate 
  377. file, so it's not as convenient as the DEC archive, but it's more up-to-
  378. date.
  379.  
  380. ----------
  381.  
  382. Q11)   How much memory and disk space does Eiffel development require?
  383.  
  384. To install and run Eiffel/S 1.3 under DOS, you need 10MB of disk space and 
  385. at least 4MB RAM (8MB recommended). Other products and platforms require 
  386. more.
  387.  
  388. However, for serious Eiffel work you could easily use 100MB or more.
  389.  
  390. ----------
  391.  
  392. Q12)   How large are typical Eiffel executables?
  393.  
  394. (How large are typical C executables?)
  395.  
  396. Seriously, Eiffel does impose a minimum size which is large since even 
  397. trivial Eiffel applications bring in a lot of classes. So, a simple program 
  398. like "Hello World" will create a relatively large executable.
  399.  
  400. Interestingly, Eiffel applications seem to grow less rapidly as new 
  401. capabilities are added. Reuse does help out tremendously in this regard. A 
  402. good Eiffel compiler allows large applications to be smaller than equally 
  403. functional applications written in C.
  404.  
  405. Note that leaving assertion checking in the code increases the size of 
  406. applications a lot. Despite this, many of us prefer that they remain 
  407. throughout development. Some even deliver a PRECONDITIONS-only version of 
  408. their applications to their early customers.
  409.  
  410. ----------
  411.  
  412. Q13)   Are there standards for the Eiffel language?
  413.  
  414. The definition of the Eiffel language is in the public domain. This 
  415. definition is controlled by NICE, the Non-profit International Consortium 
  416. for Eiffel. This means that anyone or any company may create a compiler, 
  417. interpreter, or whatever having to do with Eiffel. NICE reserves the right 
  418. to validate that any such tool conforms to the current definition of the 
  419. Eiffel language before it can be distributed with the Eiffel trademark. 
  420. (i.e. advertised as an "Eiffel" compiler.)
  421.  
  422. The Eiffel trademark is owned and controlled by NICE. NICE is using Dr. 
  423. Meyer's book, "Eiffel: The Language" (2nd Printing), as the initial 
  424. definition of the language.
  425.  
  426. The NICE board of directors consists of Bertrand Meyer, Simon Parker and 
  427. Roger Browne (chairman).
  428.  
  429. NICE has formed the Eiffel Standards Group (ESG) to resolve standards 
  430. questions and control the evolution of the language. The three current 
  431. Eiffel Compiler Vendors (ISE, SIG and Tower) are represented in the ESG as 
  432. well as many important and influential users of Eiffel.
  433.  
  434. There are three committees -- Language, Library, and Future Directions.
  435.  
  436. The Language Committee will address the ambiguities in the Eiffel Version 3 
  437. language specification as well as the differences that appear between the 
  438. current Eiffel 3 implementations.
  439.  
  440. The Library Committee will standardize the Kernel library, then consider 
  441. interface standards for the data structures cluster and other key Eiffel 
  442. clusters.
  443.  
  444. The Future Requirements Committee will prioritize the long range direction 
  445. of the standards work performed by the other two committees.
  446.  
  447. The NICE Interoperability Program (NIP) tracks the reporting and resolution 
  448. of interoperability problems. If you are aware of a problem whereby correct 
  449. Eiffel code will not run under a particular implementation, or where 
  450. correct Eiffel code produces different results under different 
  451. implementations, you are invited to report this by email to 
  452. nice-nip@atlanta.twr.com
  453.  
  454. NICE (Nonprofit International Consortium for Eiffel)
  455. 2701 Stratford Drive
  456. Austin, TX 78746
  457. TEL: (512) 328 6406
  458. FAX: (512) 328 0466
  459. email: nice@twr.com
  460.  
  461. ----------
  462.  
  463. Q14)   How fast do Eiffel applications run?
  464.  
  465. Early versions of Eiffel were slow. Recent implementations have improved 
  466. dramatically. However, to achieve maximum performance under any Eiffel 
  467. implementation, run-time assertion monitoring must be switched off.
  468.  
  469. It's hard to generalise, but compared to C++, simple computation-intensive 
  470. applications will run perhaps 15% slower. Large applications are often 
  471. dominated by memory management rather than computation. ISE recently 
  472. demonstrated that by simply adding a call to the garbage collector's "full-
  473. collect" routine at a time when there were known to be few live objects, 
  474. performance became dramatically faster than a corresponding C++ version.
  475.  
  476. ----------
  477.  
  478. Q15)   Are there any Eiffel user groups?
  479.  
  480. International Eiffel                 UK & Ireland Eiffel Interest Group
  481.   User Group (IEUG)                  Caroline Browne
  482. Darcy Harrison - Attention: IEUG     9 Princeton Court
  483. ISE Inc.                             55 Felsham Road
  484. 270 Storke Road, Suite 7             London SW15 1AZ
  485. Goleta, CA 93117, USA                TEL 081 780 1088
  486. TEL (805) 685-1006                   FAX 081 780 1941
  487. FAX (805) 685-6869                   (publishes a newsletter and holds
  488. email darcyh@eiffel.com               a quarterly meeting and seminar)
  489.  
  490. GUE, Groupe des Utilisateurs Eiffel (France)
  491. Jean-Marc Nerson
  492. 104 rue Castagnary, 75015 Paris
  493. TEL +33 1 45 32 58 80
  494. FAX +33 1 44 32 58 81
  495. email marc@eiffel.fr
  496. (meets every two months or so)
  497.  
  498. ----------
  499.  
  500. Q16)   Where can I get Eiffel products and services?
  501.  
  502. Interactive Software Engineering, Inc.  Jay-Kell Technologies, Inc.
  503. 270 Storke Road, Suite 7                48 Lakeshore Road, Suite #1
  504. Goleta, CA 93117                        Pointe Claire, Quebec
  505. TEL 805-685-1006                        Canada H9S 4H4
  506. FAX 805-685-6869                        TEL +51 4 630 1005
  507. email info@eiffel.com                   FAX +51 4 630 1456
  508.  
  509. SIG Computer GmbH                       Tower Technology Corporation
  510. zu den Bettern 4                        1501 Koenig Lane
  511. D 35619 Braunfels, Germany              Austin, TX 78756 USA
  512. TEL +49 6472 2096, FAX +49 6472 7213    TEL 512-452-9455
  513. email eiffel@sigcomp.de                 FAX 512-452-1721
  514. (cyrillic email eiffel@sigcomp.msk.su)  email: tower@twr.com
  515.  
  516. Class Technology Pty. Ltd.              
  517. 6 Pound Road                            
  518. Hornsby NSW 2077, Australia             
  519. TEL +61 2 477 6188                      
  520. FAX +61 2 476 4378                      
  521. email class@peg.pegasus.oz.au           
  522.  
  523. Everything Eiffel                       Simon Parker
  524. 6 Bambers Walk                          45 Hazelwood
  525. Wesham PR4 3DG                          Shankill
  526. England                                 Co Dublin, Ireland
  527. TEL +44 772 687525                      TEL +353 1 282 3487
  528. email rogerb@eiffel.demon.co.uk         email sparker@eiffel.ie
  529.  
  530. EtnoTeam                                SOL
  531. Via Adelaide Bono Cairoli 34            104 rue Castagnary
  532. 20217 Milano                            75015 Paris
  533. Italy                                   France
  534. TEL +39 2 261621                        TEL +33 1 45 32 58 80
  535. FAX +39 2 26110755                      FAX +33 1 44 32 58 81
  536.  
  537. Enea Data                               Sritech Information Technology
  538. Box 232, Nytorpsvagen 5                 744/51 2nd Floor
  539. S-183 23 Taby, Sweden                   10 Mian Road, 4th Block
  540. TEL +46 8 792 25 00                     Jayanagar, Bangalore, India 560011
  541. FAX +46 8 768 43 88                     TEL +91 812 640661
  542. email eiffel@enea.se                    FAX +91 812 643608
  543.  
  544. Cromasoft, SA de CV                     Objective Methods Ltd
  545. Mazatlan 161                            PO Box 17356 (77 Chamberlain Rd)
  546. Col Condesa, 06140 Mexico               Karori, Wellington, New Zealand
  547. TEL +52 5 286 82 13                     TEL +64 4 476 9499
  548. FAX +52 5 286 80 57                     FAX +64 4 476 9237 or 8772
  549. email claudio@croma.sunmexico.sun.com   email dkenny@swell.actrix.gen.nz
  550.  
  551. Cybertech                               Forefront Computer Services
  552. Systens Integration for CIM               Pty. Ltd.
  553. Suarez 1281, Third Floor,Apt.A          115 Seaford Road
  554. CP-1288 Buenos Aires                    Seaford, Victoria 3198
  555. Argentina                               Australia
  556. TEL +54 1 28 1950                       TEL +61 3 785 1122
  557. FAX +54 1 322 1071 or +54 1 963 0070    FAX +61 3 770 0961
  558.  
  559. SOOPS                                   Software Research Associates
  560. Sarphatistraat 133                      1-1-1 Hirakawo-Cho
  561. NL-1018 GC Amsterdam, The Netherlands   Chiyoda-ku Tokyo 102, Japan
  562. TEL +31 20 525 6644                     TEL +81 3 3234 8789
  563. FAX +31 20 624 6392                     FAX +81 3 3262 9719
  564. email A731CISK@HASARA11.BITNET          email sugita@sra.co.jp
  565.  
  566. Information and Math Science Lab Inc.   ZumaSoft
  567. 2-43-1, Ikebukuro, Toshima-ku           6235 Paseo Canyon Drive
  568. Tokyo 171, Japan                        Malibu, California 90265, USA
  569. email fushimi@idas.imslab.co.jp         TEL & FAX +1 310 457-6263
  570. TEL +81 3 3590 5211                     email 72674.3161@compuserve.com
  571. FAX +81 3 3590 5353
  572.  
  573. Objectif Concept                        Abstraction (Jacques Silberstein)
  574. Passage Cour-Robert 5                   18 Faubourg de l'Hopital
  575. CH 1700 Fribourg, Switzerland           2000 Neuchatel, Switzerland
  576. TEL (41) 37-232977                      phone +41.38.25.04.93
  577. FAX (41) 37-464889                      fax +41.38.259.857
  578.                                         email 100015.304@compuserve.com
  579.  
  580. ----------
  581.  
  582. Q17)   Are there any conferences for Eiffel users?
  583.  
  584. The conferences listed here are not just for Eiffel. Eiffel shares the 
  585. spotlight with other object-oriented languages including C++ and Smalltalk.
  586.  
  587. Aug 1 - 5, 1994
  588.    TOOLS USA '94, Santa Barbara, California
  589.    Deadline for papers: 18 March
  590.  
  591. Nov 29 - Dec 1, 1994
  592.   TOOLS PACIFIC '94, Melbourne, Australia
  593.   Deadline for papers: 22 July
  594.  
  595. TOOLS is the major international conference devoted to the applications of 
  596. Object-Oriented technology. Other events, such as Eiffel User Group 
  597. meetings or NICE meetings are often held in conjunction with TOOLS.
  598.  
  599. TOOLS Conferences
  600. PO Box 6863, Santa Barbara, CA 93160, USA
  601. TEL (805) 685 1006, FAX (805) 685 6869
  602. email tools@tools.com
  603.  
  604. ----------
  605.  
  606. Q18)   Why do Eiffel implementations compile to C?
  607.  
  608. (Although current Eiffel implementations compile to C or C++, native code 
  609. compilers may become available in the future.)
  610.  
  611. By using C as a target language, an Eiffel implementor can:
  612.  
  613. -  bring Eiffel to the marketplace faster and at lower cost
  614. -  port their implementation more easily to other platforms
  615. -  take advantage of optimisation provided by the C compiler
  616.  
  617. Much of the technology that makes Eiffel relatively simple to use also 
  618. makes it more difficult to implement (an Eiffel-to-C compiler is perhaps 4 
  619. to 5 times more difficult to create than a native Pascal compiler).
  620.  
  621. Compiling Eiffel to C seems to work well under Unix. C is sometimes thought 
  622. of as the native code of Unix.
  623.  
  624. On the other hand, C is not universal on other platforms, and the Eiffel 
  625. purchaser may need to buy a C compiler as well, and possibly replace it if 
  626. the supported C compilers change with new versions of the Eiffel compiler.
  627.  
  628. With a native-code compiler, you'd get somewhat better throughput and the 
  629. potential for smaller executables and slightly better performance. You'd 
  630. also get a higher price and an even longer wait for Eiffel to show up on 
  631. other than the leading market share machines.
  632.  
  633. ----------
  634.  
  635. Q19)   What is BON?
  636.  
  637. BON ("Business Object Notation") is a method for high-level analysis and 
  638. design, offering a seamless transition to an Eiffel implementation. The 
  639. method emphasizes Design by Contract and systematic development. For more 
  640. information on BON, see the Communications of the ACM, September 1992.
  641.  
  642. ----------
  643.  
  644. Q20)   Where can I get an Eiffel editor or emacs-mode?
  645.  
  646. Franck Arnaud's Eiffel extension to the Windows/WindowsNT programmers 
  647. editor Codewright from Premia allows you to see Eiffel code in colour, has 
  648. smart indenting and a few templates. Available by anonymous FTP from
  649. ftp://ftp.cm.cf.ac.uk/pub/eiffel/tools/cweiffel.zip
  650.  
  651. The WINEDIT shareware programmer's editor offers colour syntax 
  652. highlighting, works with Eiffel/S under MS-Windows, and is available from:
  653. ftp://src.doc.ic.ac.uk/computing/systems/ibmpc/windows3/programr/we-30d.zip
  654. and ftp://gatekeeper.dec.com/.f/micro/msdos/win3/programr/we-30d.zip
  655.  
  656. Alan Philips' free Programmers File Editor also works with Eiffel/S under 
  657. MS-Windows, has templates but not syntax highlighting, available from:
  658. ftp://src.doc.ic.ac.uk/computing/systems/ibmpc/simtel/windows3/pfe0506.zip
  659. and ftp://gatekeeper.dec.com/.f/micro/msdos/win3/programr/pfe0506.zip
  660.  
  661. Tower supplies an emacs-mode to anyone who requests it. Send mail to 
  662. elisp@atlanta.twr.com to get the latest version.
  663.  
  664. ----------
  665.  
  666. L01)   What features does Eiffel have?
  667.  
  668. Eiffel is a pure object-oriented language. Its modularity is based on 
  669. classes. It stresses reliability, and facilitates design by contract. It 
  670. brings design and programming closer together. It encourages the re-use of 
  671. software components.
  672.  
  673. Eiffel offers classes, multiple inheritance, polymorphism, static typing 
  674. and dynamic binding, genericity (constrained and unconstrained), a 
  675. disciplined exception mechanism, systematic use of assertions to promote 
  676. programming by contract, and deferred classes for high-level design and 
  677. analysis.
  678.  
  679. Eiffel has an elegant design and programming style, and is easy to learn.
  680.  
  681. ----------
  682.  
  683. L02)   What changes have been made to the Eiffel language definition?
  684.  
  685. Eiffel is still a relatively new language, and there have been a number of 
  686. changes to its definition. Here is a summary of the major changes:
  687.  
  688. 1. Changes between the publication of "Object-Oriented Software 
  689.    Construction" in 1988, and the release of Eiffel 2.3:
  690.  
  691.    - Constrained genericity enables a generic class to restrict its
  692.      generic parameters to the descendants of a given class
  693.  
  694.    - The indexing clause allows information about a class to be
  695.      recorded for extraction by archival, browsing and query tools
  696.  
  697.    - The assignment attempt operator "?=" provides a way to make
  698.      type-safe assignments going against the inheritance hierarchy
  699.  
  700.    - User-defined infix and prefix operator features
  701.  
  702.    - Expanded types support composite objects without dynamic
  703.      allocation, and with value semantics
  704.  
  705.    - The obsolete clause for smooth library evolution
  706.  
  707.    - The unique keyword for implicitly-assigned integer codes
  708.  
  709.    - The multi-branch instruction (similar to a case statement)
  710.  
  711.    - The boolean operator for implication ("implies")
  712.  
  713. 2. Changes with the introduction of Eiffel Version 3:
  714.  
  715.    - The feature adaptation subclause must now be terminated with "end"
  716.  
  717.    - Semicolons as instruction separators are optional
  718.  
  719.    - Groups of features are bracketed by a feature clause. All features
  720.      are exported unless the feature clause specifies a restriction.
  721.      The repeat subclause is no longer needed, because inherited
  722.      features keep the original export status they had in the parent
  723.      unless they are redefined, or are the subject of an export
  724.      subclause in the feature adaptation clause.
  725.  
  726.    - Preconditions can only be replaced by weaker ones, postconditions
  727.      can only be replaced by stronger ones. This is now enforced by the
  728.      language through the use of "require else" in preconditions and
  729.      "ensure then" in postconditions.
  730.  
  731.    - Ambiguities in repeated inheritance are resolved by a select
  732.      clause.
  733.  
  734.    - A feature can no longer be replicated and redefined in the same
  735.      feature adaptation clause, however the same effect can be achieved
  736.      through repeated inheritance
  737.  
  738.    - Two or more features may be defined at the same time (e.g. "f1, f2
  739.      is...").
  740.  
  741.    - The keyword "frozen" before a feature name prohibits redefinition
  742.      of the feature in descendants
  743.  
  744.    - In an anchored declaration, the anchor may now also be a formal
  745.      argument of the enclosing routine
  746.  
  747.    - A class may have zero, one or more creation procedures, designated
  748.      with the "creation" keyword. A new creation syntax using the "!!"
  749.      symbol allows the appropriate creation procedure to be specified.
  750.      It is also possible to directly create an object of any type which
  751.      conforms to the entity to which it is being attached.
  752.  
  753.    - The meaning of dot notation has been made more uniform, and
  754.      alternative constructs have been provided for the special
  755.      language-defined features that previously used dot notation:
  756.          x.Create   is now  !! x
  757.          y.Clone(x) is now  y := clone(x)
  758.          x.Forget   is now  x := Void
  759.          x.Void     is now  x = Void
  760.          x.Equal(y) is now  equal(x, y)
  761.  
  762.    - Manifest arrays can be specified, for example
  763.          <<"Jan", "Feb", "Mar">>
  764.      which also provides a way to pass a variable number of arguments
  765.      to a routine.
  766.  
  767.    - The command-line parameters are made available to the creation
  768.      procedure of the root class as an array of strings.
  769.  
  770.    - A default rescue procedure called default_rescue may be defined
  771.      and inherited.
  772.  
  773.    - A class may be declared to be an expanded class, in which case any
  774.      type based on that class will be expanded.
  775.  
  776.    - An object may no longer contain a reference to an expanded object
  777.      that is a sub-object of another object. Instead, upon assignment
  778.      of an expanded object to a non-expanded object, the expanded
  779.      object will be cloned, and a reference to the newly-cloned object
  780.      will be stored in the non-expanded object.
  781.  
  782.    - The operator "div" has been replaced by "//", and the operator
  783.      "mod" has been replaced by "\\".
  784.  
  785. 3. Changes between first and second printings of "Eiffel: The Language"
  786.  
  787.    - New basic types INTEGER_REF, REAL_REF, CHARACTER_REF and
  788.      BOOLEAN_REF etc have been introduced to provide non-expanded basic
  789.      types.
  790.  
  791.    - Introduction of the POINTER type to enable external references to
  792.      be passed around in Eiffel programs.
  793.  
  794.    - Calls from Eiffel to external routines no longer implicitly pass
  795.      the current object as the first parameter.
  796.  
  797. ----------
  798.  
  799. L03)   What libraries come with Eiffel?
  800.  
  801. ISE Eiffel 3:
  802.  
  803. EiffelBase (the basic library) is a library of reusable components covering 
  804. data structures and algorithms. It is the result of long-going systematic 
  805. effort at classifying the fundamental patterns and structures of computer 
  806. science in a Linnaean manner. It relies heavily on the Eiffel method, in 
  807. particular assertions (preconditions, postconditions, class invariants), 
  808. Design by Contract, constrained genericity, and repeated inheritance.
  809.  
  810. EiffelVision (the GUI library) is an encapsulation of essential graphical 
  811. abstractions. It makes it possible to build graphical Eiffel applications 
  812. without having to learn and use the internal details of X, Motif, OpenLook 
  813. or other window systems, as they are all encapsulated in EiffelVision's 
  814. classes in a form that is closer to application-related concepts.
  815.  
  816. EiffelLex provides a set of lexical analysis facilities.
  817.  
  818. EiffelParse (still in a somewhat provisional state) is an object-oriented 
  819. approach to parsing.
  820.  
  821. Other libraries are under development; in particular, third-party
  822. products are being integrated into the EiffelShelf distribution.
  823. (If you are interested in submitting components to the EiffelShelf,
  824. for profit or just for fame, please contact shelf@eiffel.com)
  825.  
  826. SIG Eiffel/S:
  827.  
  828.    The universal classes -- GENERAL, PLATFORM, ANY and NONE
  829.  
  830.    The special classes, some of which are treated specially by the compiler 
  831.    -- PART_COMPARABLE, COMPARABLE, NUMERIC, HASHABLE, BOOLEAN, CHARACTER, 
  832.    INTEGER, REAL, DOUBLE, ARRAY, BITS n, OBJECT_STRUCTURE and STRING
  833.  
  834.    ENVIRONMENT -- provides access to command line arguments and environment 
  835.    variables
  836.  
  837.    BASIC_IO -- access to standard input, standard output and error output 
  838.    serial I/O
  839.  
  840.    FORMAT -- conversion of other data types to and from strings
  841.  
  842.    EXCEPTION -- fine grained access to exception handling
  843.  
  844.    SYSTEM_TIME -- system time interface
  845.  
  846.    INTERNAL -- control of the garbage collector
  847.  
  848.    The FILES cluster: FILE, FILE_SYSTEM, FSYS_DAT -- files are modelled as 
  849.    persistent dynamic arrays
  850.  
  851.    TEXTFILE -- treats an ASCII text file as an array of strings
  852.  
  853.    The SORTER class -- a sorting 'expert' that knows how to sort arrays 
  854.    optimally
  855.  
  856.    The MATH class -- trig, log, truncation, and a few constants
  857.  
  858.    The basic container classes -- classified according to uniqueness (can 
  859.    the same object occur more than once in the container?), ordering (are 
  860.    objects in the container kept in sorted order?) and search access (does 
  861.    one search for a key, or for the object itself?), as well as by 
  862.    efficiency (is speed or size more important?): LIST, SORTED_LIST, 
  863.    SIMPLE_TABLE, HASH_TABLE, SORTED_TABLE, SHORT_LIST, SHORT_TABLE, 
  864.    SHORT_SORTED_LIST and SHORT_SORTED_TABLE
  865.  
  866.    Other container classes -- associative arrays accessed by a hashable 
  867.    key: DICTIONARY (with unique keys) and CATALOG (with multiple items per 
  868.    key)
  869.  
  870.    Specialised container classes -- STACK, QUEUE, PRIORITY_QUEUE and 
  871.    KEY_PRIORITY_QUEUE
  872.  
  873.    Abstract container classes -- define much of the interface of 
  874.    containers: COLLECTION, TABLE, SORTED_COLLECTION and SORT_TABLE.
  875.  
  876.    Iterator classes -- objects stored within containers can be visited 
  877.    sequentially with iterators. More than one iterator can be active on a 
  878.    container at one time: TRAVERSABLE, TWOWAY_TRAVERSABLE, ITERATOR and 
  879.    TWOWAY_ITER.
  880.  
  881.    The GRAPH Cluster -- a graph is defined by the classes VERTEX and EDGE. 
  882.    It may have weighted edges (WT_GRAPH) or unweighted edges (GRAPH). 
  883.    Iterators are provided to visit the edges emanating from a vertex 
  884.    (EDGE_ITER); or all the vertices of a graph in breadth-first order 
  885.    (BREADTH_ITER), depth-first order (DEPTH_ITER) or topological order 
  886.    (TOP_ITER).
  887.  
  888.    The MATCHER Cluster -- the MATCHER class is a pattern matcher that can 
  889.    build and activate an automaton to search for patterns in text. 
  890.    Effective descendants search for text using the Rabin-Karp algorithm 
  891.    (RK_MATCHER), the Knuth-Morris-Pratt algorithm (KMP_MATCHER) and the 
  892.    Boyer-Moore algorithm (BM_MATCHER). Others search for Regular 
  893.    Expressions (RE_MATCHER) and lists of keywords (KEYWORD_MATCHER). 
  894.    TXT_MATCHER is an iterator that searches for multiple occurrences of a 
  895.    pattern in an array of strings, using any of the matcher classes.
  896.  
  897.    The documentation is brief but readable, including examples and hints 
  898.    for adding new containers or matchers. All in all, a smaller but 
  899.    possibly tighter set of libraries.
  900.  
  901. (This response may give the appearance that Eiffel/S libraries are much
  902. more extensive than ISE's, but the converse is true.)
  903.  
  904. The Eiffel Booch Components are available for use with TowerEiffel. Most of 
  905. them can be made safe in the presence of multiple threads of control. They 
  906. come with testing classes which double as training aids. They include:
  907.  
  908.   Data Structures
  909.     Bags, collections, deques, dictionaries, graphs, lists, maps, queues, 
  910.     rings, sets, stacks and trees.
  911.  
  912.   Tools
  913.     Pattern-matching, search, sort.
  914.  
  915.   Support Classes
  916.     Node, hash table, dictionary, synchronisation, date and time.
  917.  
  918. ----------
  919.  
  920. L04)   What's the big deal about preconditions and postconditions?
  921.  
  922. The big deal is that it supports programming by contract. For example, 
  923. preconditions (require clauses) are simple boolean statements that are used 
  924. to check that the input arguments are valid and that the object is in a 
  925. reasonable state to do the requested operation. If not, an exception is 
  926. generated. Similarly, postconditions (ensure clauses) make sure that a 
  927. method has successfully performed its duties, thus "fulfilling its 
  928. contract" with the caller. Invariants are boolean expressions that are 
  929. checked every time an object method returns back to a separate object.
  930.  
  931. You can use these ideas in any object-oriented programming language, but 
  932. usually must supply your own assertion mechanisms or rely on programmer 
  933. discipline. In Eiffel, the ideas are integrated into the whole fabric of 
  934. the environment. We find them used by:
  935.  
  936. -- the exception handling mechanism.
  937.    (Tracebacks almost always identify the correct culprit code since 
  938.    preconditions almost always denote an error in the calling method, while 
  939.    postconditions denote an error in the called method.)
  940.  
  941. -- the automatic compilation system.
  942.    (Assertions can be disabled entirely or selectively by type on a per 
  943.    class basis.)
  944.  
  945. -- the Eiffel compiler
  946.    (Invariants, preconditions and postconditions are all inherited in a 
  947.    manner that makes logical sense.)
  948.    (Assertion expressions are not allowed to produce side effects so they 
  949.    can be omitted without effect.)
  950.  
  951. -- the automatic documentation tools
  952.    (Preconditions and postconditions are important statements about what a 
  953.    method does, often effectively describing the "contract" between the 
  954.    caller and callee. Invariants can yield information about legal states 
  955.    an object can have.)
  956.  
  957. In the future we expect to see formal methods technology work its way into 
  958. the assertion capability. This will allow progressively more powerful 
  959. constraints to be put into place. In addition, if a conjecture by Dr. Meyer 
  960. bears fruit, the notion of preconditions may be extended into an important 
  961. mechanism for the development of parallel programming.
  962.  
  963. ----------
  964.  
  965. L05)   Please explain and discuss covariance vs. contravariance.
  966.  
  967. Consider the following situation: we have two classes PARENT and CHILD. 
  968. CHILD inherits from PARENT, and redefines PARENT's feature 'foo'.
  969.  
  970.    class PARENT
  971.       feature
  972.          foo (arg: A) is ...
  973.    end; -- PARENT
  974.  
  975.    class CHILD
  976.       inherit
  977.          PARENT redefine foo
  978.       feature
  979.          foo (arg: B) is ...
  980.     end; -- CHILD
  981.  
  982. The question is: what restrictions are placed on the type of argument to 
  983. 'foo', that is 'A' and 'B'? (If they are the same, there is no problem.)
  984.  
  985. Here are two possibilities:
  986.  
  987.    (1)  B must be a child of A (the covariant rule - so named because in 
  988.         the child class the types of arguments in redefined routines are 
  989.         children of types in the parent's routine, so the inheritance 
  990.         "varies" for both in the same direction)
  991.  
  992.    (2)  B must be a parent of A (the contravariant rule)
  993.  
  994. Eiffel uses the covariant rule.
  995.  
  996. At first, the contravariant rule seems theoretically appealing. Recall that 
  997. polymorphism means that an attribute can hold not only objects of its 
  998. declared type, but also of any descendant (child) type. Dynamic binding 
  999. means that a feature call on an attribute will trigger the corresponding 
  1000. feature call for the *actual* type of the object, which may be a descendant 
  1001. of the declared type of the attribute. With contravariance, we can assign 
  1002. an object of descendant type to an attribute, and all feature calls will 
  1003. still work because the descendant can cope with feature arguments at least 
  1004. as general as those of the ancestor. In fact, the descendant object is in 
  1005. every way also a fully-valid instance of the ancestor object: we are using 
  1006. inheritance to implement subtyping.
  1007.  
  1008. However, in programming real-world applications we frequently need to 
  1009. specialize related classes jointly.
  1010.  
  1011. Here is an example, where PLOT_3D inherits from PLOT, and DATA_SAMPLE_3D 
  1012. inherits from DATA_SAMPLE.
  1013.  
  1014.    class PLOT
  1015.       feature
  1016.          add(arg: DATA_SAMPLE) is ...
  1017.  
  1018.    class PLOT_3D
  1019.       inherit
  1020.          PLOT redefine add
  1021.       feature
  1022.          add(arg: DATA_SAMPLE_3D) is ...
  1023.  
  1024. This requires the covariant rule, and works well in Eiffel.
  1025.  
  1026. It would fail if we were to put a PLOT_3D object into a PLOT attribute and 
  1027. try to add a DATA_SAMPLE to it. It fails because we have used inheritance 
  1028. to implement code re-use rather than subtyping, but have called a feature 
  1029. of the ancestor class on an object of the descendant class as if the 
  1030. descendant object were a true subtype. It is the compiler's job to detect 
  1031. and reject this error, to avoid the possibility of a run-time type error.
  1032.  
  1033. Here's another example where a real-world situation suggests a covariant 
  1034. solution. Herbivores eat plants. Cows are herbivores. Grass is a plant. 
  1035. Cows eat grass but not other plants.
  1036.  
  1037.    class HERBIVORE                               class PLANT
  1038.    feature
  1039.       eat(food: PLANT) is ...
  1040.       diet: LIST[PLANT]
  1041.  
  1042.    class COW                                     class GRASS
  1043.    inherit                                       inherit
  1044.       HERBIVORE                                     PLANT
  1045.          redefine eat
  1046.       end
  1047.    feature eat(food: GRASS) is ...
  1048.  
  1049. This does what we want. The compiler must stop us from putting a COW object 
  1050. into a HERBIVORE attribute and trying to feed it a PLANT, but we shouldn't 
  1051. be trying to do this anyway.
  1052.  
  1053. Also consider the container 'diet'. We are not forced to redefine this 
  1054. feature in descendant classes, because with covariant redefinition of the 
  1055. argument to 'eat', the feature 'diet' can always contain any object that 
  1056. can be eaten (e.g. grass for a cow). (With contravariant redefinition of 
  1057. the argument to 'eat', it would be necessary to re-open the parent class to 
  1058. make the type of the container 'diet' more general).
  1059.  
  1060. To summarise: Real-world problems often lend themselves to covariant 
  1061. solutions. Eiffel handles these well. Incorrect programs in the presence of 
  1062. covariant argument redefinition can cause run-time type errors unless the 
  1063. compiler catches these.
  1064.  
  1065. Sather uses the contravariant rule, but uses separate mechanisms for 
  1066. subtyping and code reuse and only allows dynamic binding on true subtypes. 
  1067. This seems to make contravariance work well, but it can force the Sather 
  1068. programmer to use concrete types when modelling covariant problems. 
  1069. Concrete types cannot be further subtyped in Sather, so this can reduce the 
  1070. potential for re-use (in Eiffel, any type can be further subtyped, but the 
  1071. compiler must check that it is used validly).
  1072.  
  1073. ----------
  1074.  
  1075. L06)   Is it true that there are "holes" in the Eiffel type system?
  1076.  
  1077. No. The design of Eiffel makes it possible to catch all type errors at 
  1078. compile time, so that an Eiffel program cannot abort with a run time type 
  1079. error.
  1080.  
  1081. However, to catch the more obscure type errors at compile time, the 
  1082. compiler must analyse the way that classes interact within the entire 
  1083. system, rather than just looking at each class one by one. This type of 
  1084. system-wide checking is also necessary for many compiler optimisations.
  1085.  
  1086. Because system-wide compile-time validity checking can be complex, some 
  1087. compilers insert run-time traps for these errors instead, and some may fail 
  1088. to correctly trap these errors. Ask your Eiffel compiler vendor how they 
  1089. handle these type problems.
  1090.  
  1091. ----------
  1092.  
  1093. L07)   Is there support for concurrency in Eiffel?
  1094.  
  1095. Eiffel 3 does not support concurrency; neither do current commercial 
  1096. compilers. However, work on concurrency is one of the hottest Eiffel-
  1097. related research topics.
  1098.  
  1099. For four articles on concurrency facilities for Eiffel, including Bertrand 
  1100. Meyer's article "Systematic Concurrent Object-Oriented Programming", see 
  1101. the September 1993 "Communications of the ACM" (Vol. 36, Number 9).
  1102.  
  1103. ----------
  1104.  
  1105. L08)   Why doesn't Eiffel allow function overloading?
  1106.  
  1107. In Eiffel, no two features of a class may have the same identifier, 
  1108. regardless of their respective signatures.  The prevents the use of 
  1109. function overloading ("multiple polymorphism"), a common programming 
  1110. technique in languages like C++.
  1111.  
  1112. Eiffel is designed to be minimal: it includes exactly the features that its 
  1113. designer considered necessary, and nothing else.
  1114.  
  1115. Because Eiffel already supports (single) polymorphism through its 
  1116. inheritance system, the only positive thing that function overloading buys 
  1117. you is reducing the number of feature names you have to learn. This is at 
  1118. the expense of reducing the ability of the compiler to trap mistakes (often 
  1119. type errors).
  1120.  
  1121. Readability is also enhanced when overloading is not possible. With 
  1122. overloading you would need to consider the type of the arguments as well as 
  1123. the type of the target before you can work out which feature is called. 
  1124. With multiple inheritance and dynamic binding this is awkward for a 
  1125. compiler and error-prone for a human. There is no intuitive rule which 
  1126. could be used to disambiguate routine calls where there is no "nearest" 
  1127. routine.
  1128.  
  1129. However, in Eiffel it's easy to write one routine with arguments of the 
  1130. most general applicable type, then use the assignment attempt operator to 
  1131. carry out the appropriate operation according to the run-time type of the 
  1132. arguments (thereby explicitly programming the disambiguation "rules").
  1133.  
  1134. Having said that, the lack of multiple polymorphism does force us to write 
  1135. some common mathematical operations (e.g. matrix math) in an awkward way, 
  1136. and forces arithmetic expressions to be treated specially (the "arithmetic 
  1137. balancing rule", ETL p385). But no-one has come up with a solution which is 
  1138. so simple, elegant and useful that it improves the quality of Eiffel as a 
  1139. whole.
  1140.  
  1141. ----------
  1142.  
  1143. L09)   Why are there no procedural types in Eiffel?
  1144.  
  1145. The notion of allowing a routine to be passed as an argument to a routine 
  1146. is in many people's view incompatible with the O-O method. The definition 
  1147. of object-orientation implies that every operation belongs to an object 
  1148. type, so one does not manipulate routines just by themselves.
  1149.  
  1150. A possible technique when one feels the need to use a routine argument is 
  1151. to write a class and include the routine in it. Then (rather than passing a 
  1152. routine argument) pass an object - an instance of this class - to which the 
  1153. routine can then be applied. This is a more flexible approach in the long 
  1154. term. For example, you may later add an "undo" routine to your routine-
  1155. containing class, or an attribute such as "time of last execution".
  1156.  
  1157.  
  1158. -- 
  1159. -- Roger Browne, 6 Bambers Walk, Wesham, PR4 3DG, UK   | Ph 0772-687525
  1160. -- Everything Eiffel: compilers/libraries/publications | +44-772-687525
  1161.  
  1162.